package com.xy.shop.common.utils;

import com.xy.shop.web.dto.OrderWriteTemplate;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * Created by zsf @date 创建时间：2017年9月22日 下午5:56:32
 * Description: 将ftl文件转为静态文件
 */
public class FreeMarkerUtil {

    /**
     *
     * @author zsf   @date 创建时间：2017年9月21日 下午1:25:11
     * @Description: 一句话描述
     * @param  object 对象内容   ,templateName2
     * @param  templateName 主模板对象名字
     * @param  FilePath 模板地址和生成地址
     * @param  templateName2 详情页模板对象名字
     * @return
     */
    public static boolean CreateHtml(OrderWriteTemplate object, List<OrderWriteTemplate> list, String templateName, String FilePath, String templateName2) {

        Map<String,Object> root=new HashMap<>();
        root.put(templateName, object);
        root.put("appList", list);
        //下面是你定义模板的路径
        //  String templatesPath="D:/ftl";
        //下面是模板的名称
        String templateFile="/"+templateName+".ftl";
        //下面是静态页面输出路径
        String htmlFile=FilePath+"/" + templateName2+".html";
        //根据模板生成静态页面
        FreeMarkerUtil.analysisTemplate(FilePath,templateFile,htmlFile,root);
        return true;
    }

    /**
     *
     * @author zsf   @date 创建时间：2017年9月21日 下午1:25:11
     * @Description: 一句话描述
     * @param  object 对象内容   ,templateName2
     * @param  templateName 主模板对象名字
     * @param  FilePath 模板地址和生成地址
     * @return
     */
    public static boolean CreateHtml(Object object,String templateName,String FilePath) {

        Map<String,Object> root=new HashMap<>();
        root.put(templateName, object);
        //下面是模板的名称
        String templateFile="/"+templateName+".ftl";
        //下面是静态页面输出路径
        String htmlFile=FilePath+ "/"+ templateName+".html";
        //根据模板生成静态页面
        FreeMarkerUtil.analysisTemplate(FilePath,templateFile,htmlFile,root);
        return true;
    }
   
    /**
     * 
     * @author zsf   @date 创建时间：2017年9月22日 下午5:57:07 
     * @Description: 一句话描述
     * @param  templatePath 模板文件存放路径
     * @param  templateName 模板文件名称
     * @param  fileName 生成的文件名称
     * @return
     */
    public static void analysisTemplate(String templatePath,String templateName,
                                        String fileName,Map<?,?>root){
        try {
            Configuration config=new Configuration();
            //设置要解析的模板所在的目录，并加载模板文件
            config.setDirectoryForTemplateLoading(new File(templatePath));
            //设置包装器，并将对象包装为数据模型
            config.setObjectWrapper(new DefaultObjectWrapper());
            //获取模板,并设置编码方式，这个编码必须要与页面中的编码格式一致
            //否则会出现乱码
            Template template=config.getTemplate(templateName,"UTF-8");
            //合并数据模型与模板
            FileOutputStream fos = new FileOutputStream(fileName);
            Writer out = new OutputStreamWriter(fos,"UTF-8");
            template.process(root, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }catch (TemplateException e) {
            e.printStackTrace();
        }
    }
}